﻿/*
<File>
	<Copyright>Copyright © 2007, Outcoder. All rights reserved.</Copyright>
	<License see="//License.txt"/>
	<Owner Name="Daniel Vaughan" Email="danielvaughan@outcoder.com"/>
	<CreationDate>2007/11/19 20:00</CreationDate>
	<LastSubmissionDate>$Date: $</LastSubmissionDate>
	<Version>$Revision: $</Version>
</File>
*/

using System;
using System.Collections.Generic;

namespace Outcoder.Logging
{
	/// <summary>
	/// Base interface for all log entries.
	/// </summary>
	public interface ILogEntry : IClientInfo
	{
		/*TODO: Add EntryId guid. */

		/// <summary>
		/// Gets the log level of the log entry.
		/// This is the intended level that the log entry should be written.
		/// This may cause the log entry to be ignored if the current
		/// <see cref="ILogStrategy"/> has a higher threshold log level.
		/// </summary>
		/// <value>The log level.</value>
		LogLevel LogLevel 
		{
			get;
		}

		/// <summary>
		/// Gets the message to be logged.
		/// </summary>
		/// <value>The message.</value>
		string Message
		{
			get;
		}

		/// <summary>
		/// Gets the code location of the call to log.
		/// </summary>
		/// <value>The code location.</value>
		CodeLocation CodeLocation
		{
			get;
		}

		/// <summary>
		/// Gets or sets the name of the thread
		/// in which the request to log was made.
		/// </summary>
		/// <value>The name of the thread.</value>
		string ThreadName
		{
			get;
		}

		/// <summary>
		/// Gets or sets the ManagedThreadId of the thread
		/// in which the request to log was made.
		/// </summary>
		/// <value>The name of the thread.</value>
		int ManagedThreadId
		{
			get;
		}

		/// <summary>
		/// Gets the time that the log request was made.
		/// </summary>
		/// <value>The time that the log request was made.</value>
		DateTime OccuredAt
		{
			get;
		}

		/// <summary>
		/// Gets the custom properties.
		/// </summary>
		/// <value>The custom properties.</value>
		IDictionary<string, object> Properties
		{
			get;
		}
	}
}
